#include <iostream>
#include "contacts.pb.h" // 引⼊编译⽣成的头⽂件

int main()
{
    std::string people_str;

    {
        // 对⼀个联系人的信息使用 PB 进行序列化，并将结果打印出来
        // .proto⽂件声明的package，通过protoc编译后，会为编译⽣成的C++代码声明同名的命名空间
        // 其范围是在.proto ⽂件中定义的内容
        contacts::PeopleInfo people;
        people.set_name("张三");
        people.set_age(18);
        // 调⽤序列化⽅法，将序列化后的⼆进制序列存⼊string中
        if(!people.SerializeToString(&people_str))
        {
            std::cerr << "序列化联系人失败！" << std::endl;
            return -1;
        }
        std::cout << "序列化成功，结果：" << people_str << std::endl;
    }

    {
        // 对序列化后的内容使用 PB 进行反序列，解析出联系人信息并打印出来
        contacts::PeopleInfo people;
        // 调⽤反序列化⽅法，读取string中存放的⼆进制序列，并反序列化出对象
        if(!people.ParseFromString(people_str))
        {
            std::cerr << "反序列化联系人失败！" << std::endl;
            return -1;
        }
        std::cout << "反序列化成功，结果：" << std::endl 
                << "姓名：" << people.name() << std::endl
                << "年龄：" << people.age() << std::endl;
    }

    return 0;
}